package com.example.demo.common;

public class Result<T> {
    private int code;  // 响应状态码
    private String message;  // 响应消息
    private T data;  // 响应数据

    // 私有构造方法，防止外部直接创建对象
    private Result(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    // 成功响应（带数据）
    public static <T> Result<T> success(T data) {
        return new Result<>(200, "Success", data);
    }

    // 成功响应（带分页数据）
    public static <T> Result<PaginationResponse<T>> successWithPagination(T records, long total) {
        return new Result<>(200, "Success", new PaginationResponse<>(records, total));
    }

    // 成功响应（带数据、自定义消息和总数）
    public static <T> Result<T> success(T data, String message, long total) {
        return new Result<>(200, message, data);
    }

    // 失败响应（带错误码和消息）
    public static <T> Result<T> error(int code, String message) {
        return new Result<>(code, message, null);
    }

    // 成功响应，无数据
    public static Result<?> success() {
        return new Result<>(200, "Success", null);  // 无数据时返回null
    }

    // Getter 方法
    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }

    public T getData() {
        return data;
    }

    // 内部类，用于处理分页数据
    public static class PaginationResponse<T> {
        private T records;  // 当前页的记录
        private long total;  // 数据总数

        public PaginationResponse(T records, long total) {
            this.records = records;
            this.total = total;
        }

        public T getRecords() {
            return records;
        }

        public long getTotal() {
            return total;
        }
    }
}
